package ace.cmp.spring.data.jdbc.querydsl.core.repository.handler;

import com.querydsl.sql.dml.SQLInsertClause;
import com.querydsl.sql.dml.SQLUpdateClause;

/**
 * @author caspar
 * @date 2024/6/26 16:03 版本号注解处理器，用于底层乐观锁处理
 */
public interface QuerydslVersionAnnotationHandler {
  /**
   * insert数据时候,处理版本号框架注解 {@link org.springframework.data.annotation.Version}
   *
   * @param entity             修改的实体数据
   * @param sqlClause          sql脚本集
   * @param enableVersionForce 强制使用框架值
   */
  void processInsert(Object entity, SQLInsertClause sqlClause, boolean enableVersionForce);

  /**
   * update数据时候,处理版本号框架注解 {@link org.springframework.data.annotation.Version}
   *
   * @param entity                  修改的实体数据
   * @param sqlClause               sql脚本集
   * @param enableOnlyUpdateVersion 是否只操作更新版本号字段,不进行过滤
   */
  void processUpdate(Object entity, SQLUpdateClause sqlClause, boolean enableOnlyUpdateVersion);
}
